﻿// WordPaster 插件简化版本
(function() {
  window.WordPaster = {
    getInstance: function(config) {
      console.log('WordPaster 插件初始化');
      
      // 简单实现
      const WordPasterInstance = {
        config: config || {},
        editor: null, // 存储编辑器引用
        
        // 设置编辑器实例
        SetEditor: function(editor) {
          this.editor = editor;
          return true;
        },
        
        // 导入Word文档方法
        importWord: function() {
          console.log('WordPaster importWord called');
          // 创建文件选择对话框
          const fileInput = document.createElement('input');
          fileInput.type = 'file';
          fileInput.accept = '.doc,.docx';
          fileInput.style.display = 'none';
          
          const self = this;
          fileInput.onchange = function(e) {
            if (e.target.files && e.target.files[0]) {
              const file = e.target.files[0];
              console.log('Selected Word file:', file.name);
              
              // 创建表单数据并上传
              const formData = new FormData();
              formData.append('file', file);
              
              // 显示加载提示
              if (self.editor) self.editor.notificationManager.open({
                text: '正在解析Word文档，请稍候...',
                type: 'info',
                timeout: 3000
              });
              
              // 调用后端API解析Word
              fetch('/qep/certificate/template/parse-word', {
                method: 'POST',
                body: formData,
                credentials: 'same-origin'
              })
              .then(response => response.json())
              .then(data => {
                if (data.code === 200 && data.data) {
                  if (self.editor) self.editor.insertContent(data.data);
                } else {
                  console.error('Word文档解析失败:', data.msg);
                  if (self.editor) self.editor.notificationManager.open({
                    text: '解析失败: ' + (data.msg || '未知错误'),
                    type: 'error'
                  });
                }
              })
              .catch(error => {
                console.error('上传Word文件出错:', error);
                if (self.editor) self.editor.notificationManager.open({
                  text: '上传出错: ' + error.message,
                  type: 'error'
                });
              });
            }
          };
          
          document.body.appendChild(fileInput);
          fileInput.click();
          document.body.removeChild(fileInput);
          
          return true;
        },
        
        // 导入PDF文档方法
        ImportPDF: function() {
          console.log('WordPaster ImportPDF called');
          // 创建文件选择对话框
          const fileInput = document.createElement('input');
          fileInput.type = 'file';
          fileInput.accept = '.pdf';
          fileInput.style.display = 'none';
          
          const self = this;
          fileInput.onchange = function(e) {
            if (e.target.files && e.target.files[0]) {
              const file = e.target.files[0];
              console.log('Selected PDF file:', file.name);
              
              // 创建表单数据并上传
              const formData = new FormData();
              formData.append('file', file);
              
              // 显示加载提示
              if (self.editor) self.editor.notificationManager.open({
                text: '正在解析PDF文档，请稍候...',
                type: 'info',
                timeout: 3000
              });
              
              // 调用后端API解析PDF
              fetch('/qep/certificate/template/parse-pdf', {
                method: 'POST',
                body: formData,
                credentials: 'same-origin'
              })
              .then(response => response.json())
              .then(data => {
                if (data.code === 200 && data.data) {
                  if (self.editor) self.editor.insertContent(data.data);
                } else {
                  console.error('PDF文档解析失败:', data.msg);
                  if (self.editor) self.editor.notificationManager.open({
                    text: '解析失败: ' + (data.msg || '未知错误'),
                    type: 'error'
                  });
                }
              })
              .catch(error => {
                console.error('上传PDF文件出错:', error);
                if (self.editor) self.editor.notificationManager.open({
                  text: '上传出错: ' + error.message,
                  type: 'error'
                });
              });
            }
          };
          
          document.body.appendChild(fileInput);
          fileInput.click();
          document.body.removeChild(fileInput);
          
          return true;
        },
        
        uploadWord: function() {
          console.log('WordPaster uploadWord called');
          const fileInput = document.createElement('input');
          fileInput.type = 'file';
          fileInput.accept = '.doc,.docx,.rtf';
          fileInput.style.display = 'none';
          
          const self = this;
          fileInput.onchange = function(e) {
            if (e.target.files && e.target.files[0]) {
              const file = e.target.files[0];
              console.log('Selected file for uploadWord:', file.name);
              const formData = new FormData();
              formData.append('file', file);
              
              if (self.editor) self.editor.notificationManager.open({
                text: '正在上传并解析Word文档...',
                type: 'info',
                timeout: 3000
              });

              fetch('/qep/certificate/template/parse-word', {
                method: 'POST',
                body: formData,
                credentials: 'same-origin'
              })
              .then(response => response.json())
              .then(data => {
                if (data.code === 200 && data.data) {
                  if (self.editor) self.editor.insertContent(data.data);
                } else {
                  console.error('Word文档上传或解析失败:', data.msg);
                  if (self.editor) self.editor.notificationManager.open({
                    text: '上传或解析失败: ' + (data.msg || '未知错误'),
                    type: 'error'
                  });
                }
              })
              .catch(error => {
                console.error('上传Word文件出错 (uploadWord):', error);
                if (self.editor) self.editor.notificationManager.open({
                  text: '上传出错: ' + error.message,
                  type: 'error'
                });
              });
            }
          };
          
          document.body.appendChild(fileInput);
          fileInput.click();
          document.body.removeChild(fileInput);
          return true;
        },
        uploadImage: function() {
          console.log('WordPaster uploadImage called - 此功能通常由编辑器自带或特定图片上传插件处理');
          // 一般此功能会让用户选择本地图片，然后上传到服务器并插入。
          // 如果您的编辑器有图片上传插件，WordPaster可能会尝试调用它。
          // 如果没有，您可以实现一个类似 uploadWord 的文件选择和上传逻辑，
          // 但后端接口应为图片上传接口，例如 /api/qep/file/upload/image
          alert('图片粘贴功能通常由编辑器或其图片上传插件处理。');
          return true;
        },
        importWordToImg: function() {
          console.log('WordPaster importWordToImg called');
          const fileInput = document.createElement('input');
          fileInput.type = 'file';
          fileInput.accept = '.doc,.docx';
          fileInput.style.display = 'none';
          
          const self = this;
          fileInput.onchange = function(e) {
            if (e.target.files && e.target.files[0]) {
              const file = e.target.files[0];
              console.log('Selected file for image conversion (importWordToImg):', file.name);
              const formData = new FormData();
              formData.append('file', file);

              if (self.editor) self.editor.notificationManager.open({
                text: '正在将Word内容转换为图片并插入...',
                type: 'info',
                timeout: 5000 
              });
              
              // 注意：后端 /qep/certificate/template/parse-word 通常返回HTML。
              // 如果目标是将Word中的图片提取出来或整个文档转为一张图片，
              // 后端需要有特定的接口支持此功能。
              // 这里我们暂时还用 parse-word，它会把整个Word内容（包括图片）转为HTML插入。
              fetch('/qep/certificate/template/parse-word', {
                method: 'POST',
                body: formData,
                credentials: 'same-origin'
              })
              .then(response => response.json())
              .then(data => {
                if (data.code === 200 && data.data) {
                  if (self.editor) self.editor.insertContent(data.data);
                } else {
                  console.error('Word转图片失败 (解析为HTML):', data.msg);
                  if (self.editor) self.editor.notificationManager.open({
                    text: '转换失败: ' + (data.msg || '未知错误'),
                    type: 'error'
                  });
                }
              })
              .catch(error => {
                console.error('Word转图片出错 (importWordToImg):', error);
                if (self.editor) self.editor.notificationManager.open({
                  text: '转换出错: ' + error.message,
                  type: 'error'
                });
              });
            }
          };
          
          document.body.appendChild(fileInput);
          fileInput.click();
          document.body.removeChild(fileInput);
          return true;
				},
        UploadNetImg: function() {
          console.log('WordPaster UploadNetImg called');
          const self = this;
          const imageUrl = prompt("请输入网络图片的URL:", "http://");

          if (imageUrl) {
            if (self.editor) self.editor.notificationManager.open({
              text: '正在抓取并上传网络图片...',
              type: 'info',
              timeout: 3000
            });
            
            // 尝试通过fetch获取图片，然后构造成File对象上传
            fetch(imageUrl)
              .then(response => {
                if (!response.ok) {
                  throw new Error('网络图片获取失败: ' + response.statusText);
                }
                return response.blob();
              })
              .then(blob => {
                const fileName = imageUrl.substring(imageUrl.lastIndexOf('/') + 1) || 'network_image.png';
                const imageFile = new File([blob], fileName, { type: blob.type });
                
                const formData = new FormData();
                formData.append('file', imageFile);

                // 使用项目中富文本编辑器通用的图片上传接口
                return fetch('/api/qep/file/upload/image', { 
                  method: 'POST',
                  body: formData,
                  // credentials: 'same-origin', // 根据后端配置决定是否需要
                });
              })
              .then(response => response.json())
              .then(data => {
                if (data.code === 200 && data.url) { // 后端返回的图片URL字段可能是 data.url 或 data.data.url
                  if (self.editor) self.editor.insertContent(`<img src="${data.url}" alt="网络图片"/>`);
                } else if (data.code === 200 && data.data && data.data.url) { // 兼容 RuoYi 后台的返回结构
                  if (self.editor) self.editor.insertContent(`<img src="${data.data.url}" alt="网络图片"/>`);
                }
                else {
                  console.error('网络图片上传失败:', data.msg || data.message);
                  if (self.editor) self.editor.notificationManager.open({
                    text: '上传失败: ' + (data.msg || data.message || '未知错误'),
                    type: 'error'
                  });
                }
              })
              .catch(error => {
                console.error('抓取或上传网络图片出错:', error);
                if (self.editor) self.editor.notificationManager.open({
                  text: '操作出错: ' + error.message,
                  type: 'error'
                });
              });
          }
          return true;
        }
      };
      
      // 将实例挂载到window上
      window.WordPasterInstance = WordPasterInstance;
      
      return WordPasterInstance;
    }
  };
})();